# ========= 导入基础模块 ============
from resources_base.module_base.importbase import *
from resources_base.module_base.basetools import md5
# ========= 导入数据的类 ============
from userweb.models import Account, Roles, Permission


def index(request):
    """展示角色的页面"""
    return render(request, 'user/roles.html')


def list_values(request):
    # 接收传递的值
    page = int(request.POST.get('page'))
    limit = int(request.POST.get('limit'))
    q_str = request.POST.get('q_str')
    # 获取符合条件的角色
    objs = list(Roles.objects.filter(name__icontains=q_str).values('id', 'name', 'desc'))
    # 分页
    one_page_data = objs[(page - 1) * limit: page * limit]
    # 返回
    return JsonResponse({'code': 0, 'count': len(objs), 'data': one_page_data})


def add_value(request):
    # 接收传递的值
    rec = request.POST
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        Roles.objects.create(name=rec.get('name'), desc=rec.get('desc'))
    except Exception as e:
        res['status'] = False
        res['error'] = "添加角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def edit_value(request):
    # 接收传递的值
    rec = request.POST
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        # 获取当前操作的对象
        obj = Roles.objects.get(id=rec.get('id'))
        # 逐一修改
        obj.name = rec.get('name')
        obj.desc = rec.get('desc')
        obj.save()
    except Exception as e:
        res['status'] = False
        res['error'] = "修改角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def del_value(request):
    # 接收传递的值
    id = request.POST.get('id')
    # 定义返回的数据结构
    res = {'status': True}
    # 异常处理
    try:
        # 获取当前操作的对象
        Roles.objects.filter(id=id).first().delete()
    except Exception as e:
        res['status'] = False
        res['error'] = "删除角色提交到数据库出现异常，请联系管理员"
    return JsonResponse(res)


def is_exists_role_name(request):
    """判断当前的角色名是否存在"""
    name = request.POST.get('name')
    is_exists = Roles.objects.filter(name=name).exists()
    if is_exists:
        return JsonResponse({'status': True})
    else:
        return JsonResponse({'status': False})


def get_roles_select(request):
    """获取所有的下拉框填充xmSelect"""
    # 获取所有roles
    roles_objs = list(Roles.objects.all().values('id','name'))
    # 定义一个集合
    roles_list = []
    # 遍历
    for item in roles_objs:
        roles_list.append({'name': item.get('name'), 'value': item.get('id')})

    # 返回
    return JsonResponse({'data': roles_list})


def list_role_permission(request):
    """获取相应角色的权限"""
    # 获取传递的条件
    role_id = request.POST.get('role_id')
    # 获取权限条目
    permissions = list(Permission.objects.filter(roles__id=role_id).values_list('order', flat=True))
    # 返回
    return JsonResponse({'data': permissions})



def update_permission(request):
    """更新权限"""
    # 接收传递的信息
    role_id = request.POST.get('role_id')
    commit_list = json.loads(request.POST.get('commit'))  # 更改后的

    # 获取数据库中当前的权限条目！！！ -- 初始化的
    db_permission = list(Permission.objects.filter(roles__id=role_id).values_list('order', flat=True))

    # 需要添加的
    add_list = list(set(commit_list) - set(db_permission))
    # 需要删除的
    remove_list = list(set(db_permission) - set(commit_list))

    # 添加权限
    try:
        # 获取当前的角色对象
        role_obj = Roles.objects.filter(id=role_id).first()
        # ---- 添加权限 ----
        for item in add_list:
            # 实例化权限对象
            permission_obj = Permission.objects.filter(order=int(item)).first()
            # 添加权限
            permission_obj.roles.add(role_obj)

        # --- 删除权限 ----
        for item in remove_list:
            # 实例化权限对象
            permission_obj = Permission.objects.filter(order=int(item)).first()
            # 添加权限
            permission_obj.roles.remove(role_obj)

        # 返回
        return JsonResponse({'status': True})
    except Exception as e:
        return JsonResponse({'status': False, 'error': '修改权限提交到数据库出现异常， 具体原因：' + str(e)})
